\chapter{Założenia systemu}
\label{chap:zalozenia_systemu}
\tightlists
Rozdział ten określa przeznaczenie i~zastosowania aplikacji do zarządzania budżetem domowym oraz precyzuje jego funkcjonalne i~niefunkcjonalne wymagania.
Zawiera również opis przyjętych założeń i~ograniczeń.

  \section{Przeznaczenie systemu}
  \indent
  
  Odbiorca systemu może być każdy, kto dokonuje różnego rodzaju operacji pieniężnych i pragnie je kontrolować. Program nie jest skierowany tylko dla osób, które mają problemy finansowe. W sytuacji, gdy suma przychodów całkowicie wystarcza na pokrycie wydatków również może istnieć potrzeba lepszego planowania transakcji. Dodatkowe środki uzyskane dzięki rozsądnemu prowadzeniu budżetu mogą być na przykład wykorzystane na polepszenie standardu życia rodziny. 
     

  
  \section{Wymagania}
 W~tej części zawarta jest pełna specyfikacja wymagań realizowanych przez
system. Wymogi zostały podzielone na funkcjonalne oraz niefunkcjonalne.
  
    \subsection{Wymagania funkcjonalne}
    \label{wymagania_funkcjonalne}
    Wymaganie funkcjonalne znajdują się w~poniższej liście. Zależności między
nimi pokazane są na rysunkach \ref{fig:wf_zaleznosci_1/3} i
\ref{fig:wf_zaleznosci_2/3}. Przestawione zależności zakładają, że użytkownik jest już uwierzytelniony.

\bigskip

\begin{figure}[h]
 \centering
 \includegraphics[width=\textwidth]{obrazy/budzet_domowy.eps}
 \caption{Zależności pomiędzy wymaganiami funkcjonalnymi - rejestracja danych}
 \label{fig:wf_zaleznosci_1/3}
\end{figure}



\begin{description}

  \item[1. Dostęp do indywidualnego konta] \hfill \\
 Każdy użytkownik aplikacji będzie miał dostęp jedynie do danych własnego konta. Dostęp do konta będzie wymagał podania loginu oraz hasła.\\
 
  \item[2. Deklaracja danych o operacjach pieniężnych] \hfill \\
System powinien umożliwiać dodanie, edycję lub usunięcie operacji pieniężnej (przychodu, wydatku). Aplikacja umożliwi nadawanie transakcjom priorytetu.\\

  \item[3. Deklaracja powtarzalności operacji pieniężnych ] \hfill \\
      System powinien dawać możliwość deklaracji powtarzalności dla operacji pieniężnej (przychód, wydatek). Użytkownik będzie wówczas poproszony o deklarację daty pierwszego wystąpienia transakcji, daty końcowej oraz okresu powtarzalności (np. codziennie, co tydzień, co miesiąc, co kwartał). Program będzie odpowiedzialny za generowanie wydatków powtarzających się.\\
      
  \item[4. Zarządzanie kategoriami operacji pieniężnych] \hfill \\
System powinien udostępniać listę domyślnych kategorii głównych i podkategorii operacji pieniężnych. Ponadto system powinien dawać możliwość dodawania, edycji i usuwania własnych kategorii głównych i podkategorii.  Użytkownik powinien mieć możliwość powiązania operacji pieniężnej z kategorią. \\

  \item[5. Deklaracja danych o kredytach ] \hfill \\
System powinien umożliwiać dodanie, edycję lub usunięcie kredytu.  Aplikacja będzie uwzględniała zarówno kredyty o ratach malejących, jak i ratach stałych. Możliwa będzie deklaracja prowizji banku, oprocentowania kredytu i opłat dodatkowych.  System będzie odpowiedzialny za wyliczanie wysokości rat, całkowitego kosztu kredytu i wartości odsetek oraz prezentację obliczonych danych w postaci wykresu. Aplikacja będzie automatycznie generował informacje o ratach i wyświetlała je w liście wydatków.\\ 

  \item[6. Deklaracja danych o lokatach ] \hfill \\
System powinien umożliwiać dodanie, edycję lub usunięcie inwestycji przynoszącej stały dochód wyrażony w procentach (np. lokata ze stałym oprocentowaniem). \\

  \item[7. Deklaracja danych o inwestycjach giełdowych ] \hfill \\
System powinien umożliwiać dodanie, edycję lub usunięcie inwestycji dotyczącej kupna akcji spółek notowanych na warszawskiej Giełdzie Papierów Wartościowych.  \\



  \item[8. Deklaracja planów oszczędzania ] \hfill \\
System powinien umożliwiać deklarację kwoty, którą użytkownik chciałby oszczędzić na określony cel. Po deklaracji daty  wydatku system będzie wyliczał, ile należy co miesiąc oszczędzać, aby pokryć koszty planowanej operacji. Użytkownik będzie mógł aktualizować wartość, którą faktycznie udało mu się zaoszczędzić w danym miesiącu. Jeżeli pojedyncza rata zostanie zmieniona, system uaktualni wartość kolejnych rat. \\
  \item[9. Synchronizacja z kontem bankowym ] \hfill \\
  System powinien umożliwiać wczytanie listy operacji z konta bankowego. Aplikacja będzie w stanie rozpoznać typ (przychód lub wydatek) i kategorię operacji.\\
    
  
  \item[10. Wyświetlanie danych o operacjach pieniężnych ] \hfill \\
System powinien umożliwić przeglądanie informacji o operacjach pieniężnych. Dane powinny być prezentowane w postaci listy. Użytkownik powinien mieć możliwość deklaracji okresu, dla którego wyświetlana jest lista transakcji. Domyślnie system powinien pokazywać wydatki i przychody z aktualnego miesiąca oraz wszystkie archiwalne kredyty, lokaty, inwestycje giełdowe i plany oszczędzania. \\
    \item[11. Wizualizacja statystyk ] \hfill \\
    System powinien pozwolić na wyświetlanie statystyk odnośnie operacji pieniężnych. Statystki powinny być generowane dla zadeklarowanego przez użytkownika okresu i prezentować: 
      \begin{enumerate}
       \item wartość bilansu wydatków i przychodów;
       \item podział wydatków i przychodów ze względu na kategorie;
       \item rozkład wydatków i przychodów z podziałam na powtarzające się i pojedyncze. \\
      \end{enumerate}


  \item[12. Prezentowanie aktualnej wartości inwestycji giełdowej ] \hfill \\
  System będzie odpowiedzialny  za prezentowanie aktualnej wartości posiadanych papierów wartościowych zgodnie z tabelą kursów udostępnianą przez warszawską Giełdę Papierów Wartościowych. \\
  
       \begin{figure}[h]
 \centering
 \includegraphics[width=\textwidth]{obrazy/budzet_domowy2.eps}
 \caption{Zależności pomiędzy wymaganiami funkcjonalnymi - prezentacja danych}
 \label{fig:wf_zaleznosci_2/3}
\end{figure} 

  \item[13. Prezentowanie aktualnej wartości lokaty ] \hfill \\
  Aplikacja będzie na bieżąco wyliczała i prezentowała aktualną wartość lokat zgodnie z zadeklarowanym przez użytkownika oprocentowaniem i okresem kapitalizacji.\\
  \item[14. Prezentowanie aktualnej wartości zadłużenia kredytowego ] \hfill \\
  System będzie odpowiedzialny za obliczenie i prezentację wartości dotychczas spłaconych rat i kwoty pozostałej do uregulowania.\\
  \item[15. Prezentowanie zgromadzonych środków planu oszczędzania ] \hfill \\
  System będzie wyliczał i prezentował, ile udało się użytkownikowi oszczędzić na zadeklarowany cel oraz ile pieniędzy jeszcze brakuje do realizacji transakcji.\\
 
\end{description}
      
    \subsection{Wymagania niefunkcjonalne}
    \label{wymagania_niefunkcjonalne}
    Wymaganie niefunkcjonalne zostały wypunktowane poniżej. Każde z~nich jest krótko scharakteryzowane.
    
    \begin{description}

  \item[1. Intuicyjność] \hfill \\
System powinien posiadać możliwie przejrzysty, intuicyjny
interfejs oraz być wygodny w~użytkowaniu, musi uwzględniać fakt, iż członkami gospodarstwa mogę być także osoby starsze. Wszystkie podstawowe elementy widoku powinny być widoczne dla różnych rozdzielczości ekranów.\\
   \item[2. Przenośność] \hfill \\
System powinien działać na możliwie wielu typach i wersjach przeglądarek internetowych. Konieczne jest, aby działał dla najnowszych wersji:
            \begin{enumerate}
       \item Internet Explorer;
       \item Firefox; 
       \item Google Chrome;
       \item Opera;
       \item Safari.
      \end{enumerate}
Aplikacja internetowa nie może wymagać żadnego dodatkowego oprogramowania poza przeglądarką internetową.\\
   \item[3. Bezpieczeństwo] \hfill \\
Użytkownik aplikacji może mieć dostęp jedynie do danych własnego konta. Poprzez modyfikację URL użytkownik nie powinien  uzyskać dostępu do poufnych danych innego użytkownika. Ponadto nie powinno być możliwe, aby potencjalny włamywacz mógł doprowadzić do wyświetlenia w oknie przeglądarki błędów wynikających z błędów języka implementacji aplikacji, czy też nieprawidłowego zapytania kierowanego do bazy danych.  \\
   \item[4. Weryfikacja wprowadzanych danych] \hfill \\    
Dane wprowadzane przez użytkownika w formularzach i polach edycyjnych powinny być zawsze sprawdzane w kontekście ich poprawności i spójności. Niedopuszczalna jest sytuacja, w której niespójne dane zostaną zapisane w bazie danych. W przypadku podania błędnych danych użytkownik powinien zostać poinformowany czytelnym komunikatem, gdzie popełnił błąd.\\ 
   \item[5. Czas reakcji systemu] \hfill \\    
Czas reakcji systemu na jakąkolwiek akcję użytkownika nie powinien przekraczać trzech sekund. Operacje długotrwałe powinny być zatem sygnalizowane wskaźnikiem postępu wykonania danej operacji. \\  
   \item[6. Niezawodność] \hfill \\    
System powinien dostępny cały czas. \\ 
 
   \item[7. Zgodność z aktualnym stanem prawnym] \hfill \\    
System powinien uwzględniać aktualny stan prawny odnośnie opodatkowania zysków z lokat bankowych.     
    
\end{description}